﻿// 功能：显示在地图上面的标记
// 描述：
// 作者：温伟鹏
// 日期：2010/10/22 13:48:13

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using MeizuSDK.Drawing;

namespace GoogleMaps
{
    /// <summary>
    /// 显示在地图上面的标记
    /// </summary>
    public class Marker
    {
        #region 私有变量
        /// <summary>
        /// 标记的坐标点集合。如果存在多个坐标点，则在地图上显示多个标记
        /// </summary>
        private List<GeoPoint> locationList;
        #endregion

        #region 公共属性
        /// <summary>
        /// 获取一个值，指示此地图标记是否为空标记。
        /// </summary>
        public bool IsEmpty
        {
            get{
                return this.locationList.Count == 0;
            }
        }
        /// <summary>
        /// 获取或设置地图标记大小
        /// </summary>
        public MarkerSize Size
        {
            get;
            set;
        }
        /// <summary>
        /// 获取或设置地图标记的标签
        /// </summary>
        public MarkerLabel Label
        {
            get;
            set;
        }
        /// <summary>
        /// 获取或设置地图标记的颜色
        /// </summary>
        public Color Color
        {
            get;
            set;
        }
        #endregion

        #region 构造函数
        /// <summary>
        /// 构造地图标记
        /// </summary>
        public Marker()
            : this(Color.Red)
        {
        }
        /// <summary>
        /// 构造地图标记
        /// </summary>
        /// <param name="color">地图标记颜色</param>
        public Marker(Color color)
            : this(color, string.Empty)
        {

        }
        /// <summary>
        /// 构造地图标记
        /// </summary>
        /// <param name="color">标记颜色</param>
        /// <param name="label">标签。范围[0-9A-Z]</param>
        public Marker(Color color, string label)
            : this(MarkerSize.Mid, color, label)
        {

        }
        /// <summary>
        /// 构造地图标记
        /// </summary>
        /// <param name="size">标记大小</param>
        /// <param name="color">标记颜色</param>
        /// <param name="label">标签。范围[0-9A-Z]</param>
        public Marker(MarkerSize size, Color color, string label)
        {
            locationList = new List<GeoPoint>();
            Size = size;
            Color = color;
            Label = new MarkerLabel(label);
        }
        #endregion

        #region 函数
        /// <summary>
        /// 增加标记点。如果存在多个标记点，则地图上会显示相同样式的多个点
        /// </summary>
        /// <param name="point"></param>
        public void AddPoint(GeoPoint point)
        {
            if(point!=null)
            {
                locationList.Add(point);
            }
        }
        /// <summary>
        /// 返回描述此标记的字符串。如果地理位置列表为空，则返回空字符串。
        /// </summary>
        /// <returns>返回描述此标记的字符串。如果地理位置列表为空，则返回空字符串。</returns>
        public override string ToString()
        {
            if (IsEmpty)
                return string.Empty;

            StringBuilder marker = new StringBuilder();
            marker.Append("markers=");
            // 颜色
            if (Color == null || Color.IsEmpty)
            {
                Color = Color.Black;
            }
            marker.Append(string.Format("color:{0}|", ColorTranslator.ToHex(Color).ToLower()));
            // 标签
            if (Label != null && !Label.IsNull)
            {
                marker.Append(Label.ToString());
            }
            // 坐标点
            for (int i = 0; i < locationList.Count; i++)
            {
                marker.Append("|" + locationList[i].ToString());
            }

            return marker.ToString();
        }
        #endregion
    }
}
